home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / python2.5 / idlelib / CallTipWindow.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-29  |  6KB  |  174 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. '''A CallTip window class for Tkinter/IDLE.
  5.  
  6. After ToolTip.py, which uses ideas gleaned from PySol
  7. Used by the CallTips IDLE extension.
  8.  
  9. '''
  10. from Tkinter import *
  11. HIDE_VIRTUAL_EVENT_NAME = '<<calltipwindow-hide>>'
  12. HIDE_SEQUENCES = ('<Key-Escape>', '<FocusOut>')
  13. CHECKHIDE_VIRTUAL_EVENT_NAME = '<<calltipwindow-checkhide>>'
  14. CHECKHIDE_SEQUENCES = ('<KeyRelease>', '<ButtonRelease>')
  15. CHECKHIDE_TIME = 100
  16. MARK_RIGHT = 'calltipwindowregion_right'
  17.  
  18. class CallTip:
  19.     
  20.     def __init__(self, widget):
  21.         self.widget = widget
  22.         self.tipwindow = None
  23.         self.label = None
  24.         self.parenline = None
  25.         self.parencol = None
  26.         self.lastline = None
  27.         self.hideid = None
  28.         self.checkhideid = None
  29.  
  30.     
  31.     def position_window(self):
  32.         '''Check if needs to reposition the window, and if so - do it.'''
  33.         curline = int(self.widget.index('insert').split('.')[0])
  34.         if curline == self.lastline:
  35.             return None
  36.         
  37.         self.lastline = curline
  38.         self.widget.see('insert')
  39.         if curline == self.parenline:
  40.             box = self.widget.bbox('%d.%d' % (self.parenline, self.parencol))
  41.         else:
  42.             box = self.widget.bbox('%d.0' % curline)
  43.         if not box:
  44.             box = list(self.widget.bbox('insert'))
  45.             box[0] = 0
  46.             box[2] = 0
  47.         
  48.         x = box[0] + self.widget.winfo_rootx() + 2
  49.         y = box[1] + box[3] + self.widget.winfo_rooty()
  50.         self.tipwindow.wm_geometry('+%d+%d' % (x, y))
  51.  
  52.     
  53.     def showtip(self, text, parenleft, parenright):
  54.         '''Show the calltip, bind events which will close it and reposition it.
  55.         '''
  56.         if len(text) >= 79:
  57.             textlines = text.splitlines()
  58.             for i, line in enumerate(textlines):
  59.                 if len(line) > 79:
  60.                     textlines[i] = line[:75] + ' ...'
  61.                     continue
  62.             
  63.             text = '\n'.join(textlines)
  64.         
  65.         self.text = text
  66.         if self.tipwindow or not (self.text):
  67.             return None
  68.         
  69.         self.widget.mark_set(MARK_RIGHT, parenright)
  70.         (self.parenline, self.parencol) = map(int, self.widget.index(parenleft).split('.'))
  71.         self.tipwindow = tw = Toplevel(self.widget)
  72.         self.position_window()
  73.         tw.wm_overrideredirect(1)
  74.         
  75.         try:
  76.             tw.tk.call('::tk::unsupported::MacWindowStyle', 'style', tw._w, 'help', 'noActivates')
  77.         except TclError:
  78.             pass
  79.  
  80.         self.label = Label(tw, text = self.text, justify = LEFT, background = '#ffffe0', relief = SOLID, borderwidth = 1, font = self.widget['font'])
  81.         self.label.pack()
  82.         self.checkhideid = self.widget.bind(CHECKHIDE_VIRTUAL_EVENT_NAME, self.checkhide_event)
  83.         for seq in CHECKHIDE_SEQUENCES:
  84.             self.widget.event_add(CHECKHIDE_VIRTUAL_EVENT_NAME, seq)
  85.         
  86.         self.widget.after(CHECKHIDE_TIME, self.checkhide_event)
  87.         self.hideid = self.widget.bind(HIDE_VIRTUAL_EVENT_NAME, self.hide_event)
  88.         for seq in HIDE_SEQUENCES:
  89.             self.widget.event_add(HIDE_VIRTUAL_EVENT_NAME, seq)
  90.         
  91.  
  92.     
  93.     def checkhide_event(self, event = None):
  94.         if not self.tipwindow:
  95.             return None
  96.         
  97.         (curline, curcol) = map(int, self.widget.index('insert').split('.'))
  98.         if not curline < self.parenline:
  99.             if curline == self.parenline or curcol <= self.parencol or self.widget.compare('insert', '>', MARK_RIGHT):
  100.                 self.hidetip()
  101.             else:
  102.                 self.position_window()
  103.                 self.widget.after(CHECKHIDE_TIME, self.checkhide_event)
  104.  
  105.     
  106.     def hide_event(self, event):
  107.         if not self.tipwindow:
  108.             return None
  109.         
  110.         self.hidetip()
  111.  
  112.     
  113.     def hidetip(self):
  114.         if not self.tipwindow:
  115.             return None
  116.         
  117.         for seq in CHECKHIDE_SEQUENCES:
  118.             self.widget.event_delete(CHECKHIDE_VIRTUAL_EVENT_NAME, seq)
  119.         
  120.         self.widget.unbind(CHECKHIDE_VIRTUAL_EVENT_NAME, self.checkhideid)
  121.         self.checkhideid = None
  122.         for seq in HIDE_SEQUENCES:
  123.             self.widget.event_delete(HIDE_VIRTUAL_EVENT_NAME, seq)
  124.         
  125.         self.widget.unbind(HIDE_VIRTUAL_EVENT_NAME, self.hideid)
  126.         self.hideid = None
  127.         self.label.destroy()
  128.         self.label = None
  129.         self.tipwindow.destroy()
  130.         self.tipwindow = None
  131.         self.widget.mark_unset(MARK_RIGHT)
  132.         self.parenline = None
  133.         self.parencol = None
  134.         self.lastline = None
  135.  
  136.     
  137.     def is_active(self):
  138.         return bool(self.tipwindow)
  139.  
  140.  
  141.  
  142. class container:
  143.     
  144.     def __init__(self):
  145.         root = Tk()
  146.         text = self.text = Text(root)
  147.         text.pack(side = LEFT, fill = BOTH, expand = 1)
  148.         text.insert('insert', 'string.split')
  149.         root.update()
  150.         self.calltip = CallTip(text)
  151.         text.event_add('<<calltip-show>>', '(')
  152.         text.event_add('<<calltip-hide>>', ')')
  153.         text.bind('<<calltip-show>>', self.calltip_show)
  154.         text.bind('<<calltip-hide>>', self.calltip_hide)
  155.         text.focus_set()
  156.         root.mainloop()
  157.  
  158.     
  159.     def calltip_show(self, event):
  160.         self.calltip.showtip('Hello world')
  161.  
  162.     
  163.     def calltip_hide(self, event):
  164.         self.calltip.hidetip()
  165.  
  166.  
  167.  
  168. def main():
  169.     c = container()
  170.  
  171. if __name__ == '__main__':
  172.     main()
  173.  
  174.